package department.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.tomcat.dbcp.dbcp.BasicDataSource;

/*
 * 전형적인 싱글톤 패턴을 적용한 것으로
 * 객체를 여러개 생성하는 것을 막고 하나 생성된 걸로 돌려 쓰게 만든 것
 * 커넥션 객체를 생성하는 방법은 직접 외부에서 뉴하고 생성할 수 없게 만들엇는데 코드를 잘 보면
 * 이 커넥션 기능을 사용하기 위해서는 일단 오픈된 메서드인 DatabaseMansger 리턴타입에 getinstance.getConnection을 해야 한다.
 */
public class DatabaseManager {
	private static DatabaseManager instance = new DatabaseManager();
	
	private BasicDataSource bds;
	
	private DatabaseManager(){
		bds = new  BasicDataSource();
		bds.setDriverClassName("org.mariadb.jdbc.Driver");
		bds.setUrl("jdbc:mariadb://waneeyo.iptime.org:3306/kosta");
		bds.setUsername("kosta");
		bds.setPassword("philia");
	}
	public static DatabaseManager getInstance(){return instance;}
	
	public Connection getConnection() throws SQLException {return bds.getConnection();}
	
	public void close(Connection conn, PreparedStatement pstmt){
		if(pstmt != null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	public void close(Connection conn, PreparedStatement pstmt, ResultSet rset){
		if(pstmt != null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(rset!=null){
			try {
				rset.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}
